/**
 * 小说下载处理器
 */

import BaseDownloadHandler from './BaseDownloadHandler.js'
import DownloadCore from './DownloadCore.js'
import ChatHistory from '../ChatHistory.js'

class NovelDownloadHandler extends BaseDownloadHandler {
  
  /**
   * 获取小说名称
   * @param {Object} novel 小说对象
   * @returns {string} 小说名称
   */
  static getItemName(novel) {
    if (novel.name && novel.name.trim() !== '') {
      return novel.name
    }
    
    if (novel.title && novel.title.trim() !== '') {
      return novel.title
    }
    
    if (novel.id) {
      return `小说 #${novel.id}`
    }
    
    try {
      const url = novel.downloadUrl || novel.url
      if (url) {
        const urlObj = new URL(url)
        const pathParts = urlObj.pathname.split('/')
        const filename = pathParts[pathParts.length - 1]
        if (filename && filename !== '') {
          const nameWithoutExt = filename.split('.')[0]
          return nameWithoutExt || '未知小说'
        }
      }
    } catch (e) {
      console.log('无法从 URL 提取小说名称')
    }
    
    return '未知小说'
  }
  
  /**
   * 获取小说类型
   * @param {Object} novel 小说对象
   * @returns {string} 小说类型
   */
  static getItemType(novel) {
    return novel.type ? novel.type.toLowerCase() : 'novel'
  }
  
  /**
   * 获取显示名称
   * @param {Object} novel 小说对象
   * @returns {string} 显示名称
   */
  static getDisplayName(novel) {
    const novelName = this.getItemName(novel)
    const author = novel.author || '未知作者'
    return `${novelName} - ${author}`
  }
  
  /**
   * 获取下载选项
   * @param {Object} novel 小说对象
   * @returns {Array} 下载选项列表
   */
  static getDownloadOptions(novel) {
    const options = []
    
    // 支持多种格式下载
    if (novel.txtUrl) {
      options.push({
        label: 'TXT格式',
        url: novel.txtUrl,
        type: 'TXT下载'
      })
    }
    
    if (novel.epubUrl) {
      options.push({
        label: 'EPUB格式',
        url: novel.epubUrl,
        type: 'EPUB下载'
      })
    }
    
    if (novel.pdfUrl) {
      options.push({
        label: 'PDF格式',
        url: novel.pdfUrl,
        type: 'PDF下载'
      })
    }
    
    // 如果没有特定格式，使用通用下载链接
    if (options.length === 0 && (novel.downloadUrl || novel.url)) {
      options.push({
        label: '下载小说',
        url: novel.downloadUrl || novel.url,
        type: '通用下载'
      })
    }
    
    return options
  }
  
  /**
   * 获取分类名称
   * @returns {string} 分类名称
   */
  static getCategory() {
    return '小说'
  }
  
  /**
   * 开始下载
   * @param {Object} novel 小说对象
   * @param {string} downloadUrl 下载链接
   * @param {string} targetDir 目标目录
   */
  static startDownload(novel, downloadUrl, targetDir) {
    const itemName = this.getItemName(novel)
    const novelType = this.getItemType(novel)
    
    // 使用下载核心模块处理下载
    DownloadCore.startDownload({
      item: novel,
      itemName: itemName,
      itemType: novelType,
      downloadUrl: downloadUrl,
      targetDir: targetDir,
      category: 'novel',
      historyHandler: null,
      getDirectory: this.getNovelDirectory.bind(this),
      getDefaultExtension: this.getDefaultExtension.bind(this)
    })
  }
  
  /**
   * 获取默认文件扩展名
   * @param {string} novelType 小说类型
   * @param {string} downloadUrl 下载链接
   * @returns {string} 默认扩展名
   */
  static getDefaultExtension(novelType, downloadUrl = '') {
    // 根据下载链接判断格式
    if (downloadUrl.includes('.epub')) return '.epub'
    if (downloadUrl.includes('.pdf')) return '.pdf'
    if (downloadUrl.includes('.mobi')) return '.mobi'
    
    // 默认使用txt格式
    return '.txt'
  }
  
  /**
   * 获取小说存储目录
   * @param {string} novelType 小说类型
   * @returns {string} 目录路径
   */
  static getNovelDirectory(novelType) {
    // 所有小说文件都下载到 /RuoyiApp/books 目录下
    const baseDir = '/RuoyiApp/books'
    return baseDir
  }
}

export default NovelDownloadHandler